package br.unifor.ads.desphouse.ui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JCheckBox;
import javax.swing.JButton;

import br.unifor.ads.desphouse.business.UsuarioBusiness;
import br.unifor.ads.desphouse.entity.Usuario;
import br.unifor.ads.desphouse.exception.BusinessException;
import br.unifor.ads.desphouse.internacionalizacao.Dicionario;
import br.unifor.ads.desphouse.util.ComponentesUtil;
import br.unifor.ads.desphouse.util.MensagemUtil;

/**
 * 
 * @author Alex Girao
 */
public class PainelUsuarioCadastro extends PainelGenerico {

	private static final long serialVersionUID = 9013862151427825226L;
	private JTextField jtfNome;
	private JTextField jtfChave;
	private JPasswordField jpfSenha;
	private JPasswordField jpfConfirmaSenha;
	private JButton jbtCancelar;
	private JButton jbtSalvar;
	private JCheckBox jcbAtivo;
	private UsuarioBusiness usuarioBusiness;

	public PainelUsuarioCadastro() {
		super();
		usuarioBusiness = new UsuarioBusiness();
		iniciarComponentes();
		aplicarEventos();
	}
	
	@Override
	protected void iniciarComponentes(){
		JLabel jlbChave = new JLabel(Dicionario.COMUNS_CHAVE+":*");
		jlbChave.setBounds(12, 62, 70, 15);
		add(jlbChave);
		
		JLabel jlbNome = new JLabel(Dicionario.COMUNS_NOME+":*");
		jlbNome.setBounds(12, 35, 70, 15);
		add(jlbNome);
		
		JLabel jlbSenha = new JLabel(Dicionario.COMUNS_SENHA+":*");
		jlbSenha.setBounds(12, 90, 70, 15);
		add(jlbSenha);
		
		JLabel lblConfirmarSenha = new JLabel(Dicionario.COMUNS_CONFIRMAR+":*");
		lblConfirmarSenha.setBounds(151, 89, 78, 17);
		add(lblConfirmarSenha);
		
		jtfNome = new JTextField();
		jtfNome.setBounds(65, 31, 241, 19);
		ComponentesUtil.limitarTamanhoJTextFiel(jtfNome, 200);
		add(jtfNome);
		jtfNome.setColumns(10);
		
		jtfChave = new JTextField();
		jtfChave.setBounds(65, 60, 78, 19);
		ComponentesUtil.limitarTamanhoJTextFiel(jtfChave, 4);
		add(jtfChave);
		jtfChave.setColumns(10);
		
		jpfSenha = new JPasswordField();
		jpfSenha.setBounds(65, 88, 78, 19);
		add(jpfSenha);
		
		jpfConfirmaSenha = new JPasswordField();
		jpfConfirmaSenha.setBounds(228, 88, 78, 19);
		add(jpfConfirmaSenha);
		
		jcbAtivo = new JCheckBox(Dicionario.COMUNS_ATIVO);
		jcbAtivo.setBounds(12, 113, 129, 23);
		add(jcbAtivo);
		
		jbtSalvar = new JButton(Dicionario.COMUNS_SALVAR);
		jbtSalvar.setBounds(12, 144, 117, 25);
		add(jbtSalvar);
		
		jbtCancelar = new JButton(Dicionario.COMUNS_CANCELAR);
		jbtCancelar.setBounds(138, 144, 117, 25);
		add(jbtCancelar);
	}

	@Override
	protected void aplicarEventos() {
		jbtCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				telaPai.atualizarPainel(new PainelUsuarioListagem());
			}
		});
		jbtSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				salvar();
			}
		});
	}
	
	@SuppressWarnings("deprecation")
	private void salvar(){
		try{
			if(isCamposObrigatoriosPreeenchidos()){
				if(isSenhasIguais()){
					if(!isChaveExiste()){
						Usuario usuario = new Usuario();
						usuario.setAtivo(jcbAtivo.isSelected());
						usuario.setNome(jtfNome.getText());
						usuario.setChave(jtfChave.getText());
						usuario.setSenha(jpfSenha.getText());
						usuarioBusiness.salvar(usuario);
						MensagemUtil.exibirPopUpInformacao(telaPai, Dicionario.MENSAGEM_GRAVADO_SUCESSO);
						telaPai.atualizarPainel(new PainelUsuarioListagem());
					}else{
						MensagemUtil.exibirPopUpErro(telaPai,Dicionario.CRITICA_USUARIO_CHAVE_DUPLICADA);
					}
				}else{
					MensagemUtil.exibirPopUpErro(telaPai,Dicionario.CRITICA_USUARIO_CADASTRO_SENHAS_DIFERENTES);
				}
			}else{
				MensagemUtil.exibirPopUpErro(telaPai,Dicionario.CRITICA_USUARIO_CADASTRO_CAMPOS_OBRIGATORIOS);
			}
		}catch(Exception e){
			e.printStackTrace();
			MensagemUtil.exibirPopUpErro(telaPai, e.getMessage());
		}
	}
	
	private boolean isChaveExiste() throws BusinessException{
		return usuarioBusiness.verificarChaveExiste(jtfChave.getText());
	}

	/**
	 * Verifica se as senhas digitadas sao iguais
	 * @return
	 */
	@SuppressWarnings("deprecation")
	private boolean isSenhasIguais(){
		return jpfSenha.getText().equals(jpfConfirmaSenha.getText());
	}
	
	/**
	 * Verifica se todos os campos foram
	 * preeenchidos
	 * @return
	 */
	@SuppressWarnings("deprecation")
	private boolean isCamposObrigatoriosPreeenchidos(){
		return jtfNome.getText().trim().length()>0
				&& jtfNome.getText().trim().length()>0 
				&& jpfSenha.getText().trim().length()>0 
				&& jpfConfirmaSenha.getText().trim().length()>0;
	}
}
